package com.itheima.reflect1;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;

//需求：将任意一个对象的字段名和对应的值保存到文本文件中
public class SaveObjectFrameWork {
    public static void saveObject(Object obj) throws Exception {
        //obj可能是Student、Teacher或Dog
        //只有反射可以知道对象有多少个字段

        PrintStream ps = new PrintStream(new FileOutputStream("junit/src/com/itheima/reflect1/obj.txt", true));

        //1.获取Class对象
        Class c = obj.getClass();
        String simpleName = c.getSimpleName();
        ps.println("===============" + simpleName + "===============");

        //2.获取Class对象的所有属性（字段）
        Field[] fields = c.getDeclaredFields();

        //3.遍历所有字段
        for (Field f : fields) {

            //4.获取字段名
            String fieldName = f.getName();

            //5.获取字段值
            f.setAccessible(true);      //暴力反射
            Object fieldValue = f.get(obj) + "";

            //6.打印到文件中去
            ps.println(fieldName + " = " + fieldValue);
        }

        ps.close();     //关闭流
    }
}
